Link del repositorio: https://github.com/ElrohirGT/Proyecto2_MineriaDeDatos
Debido a que ya tenemos los datos por las entregas anteriores procedemos a elaborar un modelo de regresión logística para la variable “EsCara” utilizando validación cruzada.
## Warning: package 'e1071' was built under R version 4.4.3
## Warning in train.default(x, y, weights = w, ...): The metric "Accuracy" was not
## in the result set. ROC will be used instead.
## [1] "Modelo de EsCara"
##
## Call:
## NULL
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -8.4410 1.0141 -8.323 < 2e-16 ***
## LotArea 0.2312 0.2635 0.878 0.380169
## OverallQual 2.0755 0.4132 5.023 5.09e-07 ***
## YearBuilt 0.6113 0.4224 1.447 0.147831
## GarageCars 1.6028 0.4714 3.400 0.000673 ***
## GrLivArea 1.0173 0.3026 3.362 0.000775 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 369.23 on 1023 degrees of freedom
## Residual deviance: 129.42 on 1018 degrees of freedom
## AIC: 141.42
##
## Number of Fisher Scoring iterations: 9
Analizando los coeficientes podemos ver que varias de las variables utilizadas tienen un p-value menor a 0.05, pero no son todas, LotArea y YearBuilt tienen un p value demasiado elevado, lo que me lleva a pensar que realmente no necesariamente se correlacionan con el precio de la vivienda.
Utilizando el modelo con el conjunto de verificación podemos ver que:
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Sí
## No 414 8
## Sí 4 10
##
## Accuracy : 0.9725
## 95% CI : (0.9524, 0.9857)
## No Information Rate : 0.9587
## P-Value [Acc > NIR] : 0.08708
##
## Kappa : 0.6109
##
## Mcnemar's Test P-Value : 0.38648
##
## Sensitivity : 0.9904
## Specificity : 0.5556
## Pos Pred Value : 0.9810
## Neg Pred Value : 0.7143
## Prevalence : 0.9587
## Detection Rate : 0.9495
## Detection Prevalence : 0.9679
## Balanced Accuracy : 0.7730
##
## 'Positive' Class : No
##
Viendo los resultados del modelo, podemos ver que aunque el “Accuracy” es muy alto, realmente el modelo es medio malo, ya que nuestro Balanced Accuracy apenas llega a 77%, esto se debe a que realmente la cantidad de casas que cumplen nuestra definición de “cara” es extremadamente alta (2 desviaciónes estándar por encima de la media). Por lo tanto tenemos que balancear la muestra para que el modelo pueda aprender características sobre este conjunto de datos reducido.
## Warning: package 'ROSE' was built under R version 4.4.3
## Loaded ROSE 0.0-4
## Warning in train.default(x, y, weights = w, ...): The metric "Precision-Recall
## AUC" was not in the result set. ROC will be used instead.
## [1] "Modelo de EsCara"
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Sí
## No 190 10
## Sí 22 215
##
## Accuracy : 0.9268
## 95% CI : (0.8982, 0.9494)
## No Information Rate : 0.5149
## P-Value [Acc > NIR] : < 2e-16
##
## Kappa : 0.8532
##
## Mcnemar's Test P-Value : 0.05183
##
## Sensitivity : 0.8962
## Specificity : 0.9556
## Pos Pred Value : 0.9500
## Neg Pred Value : 0.9072
## Prevalence : 0.4851
## Detection Rate : 0.4348
## Detection Prevalence : 0.4577
## Balanced Accuracy : 0.9259
##
## 'Positive' Class : No
##
¡Podemos ver que este modelo se comporta de una manera mucho mejor al anterior! Aunque el accuracy normal disminuyó considerablemente el accuracy balanceado aumentó a 92%! Esto se debe principalmente a que nuestro modelo ya es capaz de identificar muchas más casas que sí son consideradas caras, pueso que las incluimos más seguido dentro del dataset.
¡Para analizar el overfitting/underfitting del modelo necesitamos evaluarlo con los datos de entrenamiento y comparar sus resultados con respecto a los datos de verificación!
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
## [1] "Usando data de entrenamiento"
## Training for 10% (n = 71)
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Training for 20% (n = 143)
## Training for 30% (n = 215)
## Training for 40% (n = 286)
## Training for 50% (n = 358)
## Training for 60% (n = 430)
## Training for 70% (n = 501)
## Training for 80% (n = 573)
## Training for 90% (n = 645)
## Training for 100% (n = 717)
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Como podemos ver, las curvas tanto de validación como de entrenamiento se siguen muy cercanamente en los rangos cercanos a 300 datos y de 500 en adelante. En el final, aunque no convergen se puede ver que sí se encuentran muy cercanos entre sí por lo tanto no hay Overfitting. Tampoco creemos que haya underfitting, puesto que aunque sí están juntas la mayoría del tiempo, el valor de accuracy es demasiado alto (mayor a 94%). Por lo que consideramos que el modelo realmente sí aprendió de forma correcta luego de aplicarle un resampling a los datos de entrada para que no tuviera despreciara minorías.
Es importante determinar como podemos mejorar nuestro modelo y esto se puede hacer modificando los hiperparametros usados. En la implementación actual del modelo de regresión logística utilizando el método “glm” dentro de la función train de la librería caret, no se puede realizar ajustes automáticos de hiperparámetros. Esto se debe a que la función glm en R, implementa la regresión logísitca estándar, no posee hiperparámetros intrínsecos que puedan ser optimizados.
En este caso el único “tunning” que se podría hacer es volver a realizar la ingeniería de caractrísticas y cambiar la selección de las variables predictoras pero esto involucraría cambiar el resto de los modelos que se hicieron en entregas anteriores por lo que no se procedera con este método y se dejara el tunning estandar que ofrece el modelo.
## Warning in train.default(x, y, weights = w, ...): The metric "Precision-Recall
## AUC" was not in the result set. ROC will be used instead.
## [1] "Modelo de EsCara"
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Sí
## No 208 22
## Sí 18 188
##
## Accuracy : 0.9083
## 95% CI : (0.8772, 0.9336)
## No Information Rate : 0.5183
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.8161
##
## Mcnemar's Test P-Value : 0.6353
##
## Sensitivity : 0.9204
## Specificity : 0.8952
## Pos Pred Value : 0.9043
## Neg Pred Value : 0.9126
## Prevalence : 0.5183
## Detection Rate : 0.4771
## Detection Prevalence : 0.5275
## Balanced Accuracy : 0.9078
##
## 'Positive' Class : No
##
Viendo la matriz de confusión obtenida vemos que estamos obteniendo más errores al predecir que una casa es cara, teniendo 22 casos (falsos negativos) que las casas si eran caras pero las clasifico como “No”. Luego vemos que que hubo 10 casos (falsos positivos) que fueron mal clasificados. Entendemos que estos errores implican en que se afecta en la eficiencia de las ventas demostrando posibles falsos datos a los compradores haciendo que exista posibles pérdidas en las oportunidades de venta.
## profvis: code exited with error:
En lo que respecta al tiempo y la memoria consumida se ve que para este modelo estos vaores son significativamente bajos. Se utilizo la libreria profviz para analizar estos datos y se obtuvo que el modelo consume un total de 17 MB que se asocia como una cantidad baja de memoria; por otro lado, se tiene un tiempo de ejecución total de 150 ms. La obtención de ambos valores bajos (memoria consumida y tiempo) indica una eficiencia algoritmica por parte del modelo mostrando una rápida y economica ejecución de este.
Teniendo los datos anteriores seria bueno analizar los modelos implementados para determinar el mejor. Esto se puede conocer rápido al analizar las matrices de confusiones que se presentaron a lo largo del reporte. En este caso tenemos un modelo inicial y su versión mejorada, se tiene que el modelo mejorado presenta un mejor rendimiento lo que hace que sea este el mejor modelo.
Actualmente solo tenemos modelos que determinan si la una casa es cara o no, vamos a actualizarlo para deducir la variable “Categoría”. A continuación se presenta la matriz de confusión obtenida por el modelo.
## # weights: 30 (18 variable)
## initial value 1285.376378
## iter 10 value 262.260641
## iter 20 value 251.642534
## final value 251.629335
## converged
## Confusion Matrix and Statistics
##
## Reference
## Prediction Baratas Caras Medianas
## Baratas 13 0 3
## Caras 0 7 1
## Medianas 11 5 250
##
## Overall Statistics
##
## Accuracy : 0.931
## 95% CI : (0.8955, 0.9574)
## No Information Rate : 0.8759
## P-Value [Acc > NIR] : 0.001599
##
## Kappa : 0.6388
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: Baratas Class: Caras Class: Medianas
## Sensitivity 0.54167 0.58333 0.9843
## Specificity 0.98872 0.99640 0.5556
## Pos Pred Value 0.81250 0.87500 0.9398
## Neg Pred Value 0.95985 0.98227 0.8333
## Prevalence 0.08276 0.04138 0.8759
## Detection Rate 0.04483 0.02414 0.8621
## Detection Prevalence 0.05517 0.02759 0.9172
## Balanced Accuracy 0.76519 0.78987 0.7699
A continuación se presentaran las matrices de confusión de los modelos que se realizaron en reportes anteriores.
## Confusion Matrix and Statistics
##
## Reference
## Prediction Barata Cara Mediana
## Barata 0 0 0
## Cara 0 13 0
## Mediana 4 21 399
##
## Overall Statistics
##
## Accuracy : 0.9428
## 95% CI : (0.9167, 0.9626)
## No Information Rate : 0.913
## P-Value [Acc > NIR] : 0.0132
##
## Kappa : 0.4883
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: Barata Class: Cara Class: Mediana
## Sensitivity 0.000000 0.38235 1.0000
## Specificity 1.000000 1.00000 0.3421
## Pos Pred Value NaN 1.00000 0.9410
## Neg Pred Value 0.990847 0.95047 1.0000
## Prevalence 0.009153 0.07780 0.9130
## Detection Rate 0.000000 0.02975 0.9130
## Detection Prevalence 0.000000 0.02975 0.9703
## Balanced Accuracy 0.500000 0.69118 0.6711
## Warning: package 'glmnet' was built under R version 4.4.3
## Loading required package: Matrix
## Loaded glmnet 4.1-8
## Confusion Matrix and Statistics
##
## Reference
## Prediction Barata Media Cara
## Barata 140 54 8
## Media 4 60 23
## Cara 0 30 118
##
## Overall Statistics
##
## Accuracy : 0.7277
## 95% CI : (0.6834, 0.7689)
## No Information Rate : 0.341
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.5915
##
## Mcnemar's Test P-Value : 2.954e-11
##
## Statistics by Class:
##
## Class: Barata Class: Media Class: Cara
## Sensitivity 0.9722 0.4167 0.7919
## Specificity 0.7884 0.9078 0.8958
## Pos Pred Value 0.6931 0.6897 0.7973
## Neg Pred Value 0.9830 0.7600 0.8927
## Prevalence 0.3295 0.3295 0.3410
## Detection Rate 0.3204 0.1373 0.2700
## Detection Prevalence 0.4622 0.1991 0.3387
## Balanced Accuracy 0.8803 0.6623 0.8439
## Warning: package 'rpart' was built under R version 4.4.3
## Confusion Matrix and Statistics
##
## Reference
## Prediction Baratas Caras Medianas
## Baratas 9 0 2
## Caras 0 6 3
## Medianas 15 6 249
##
## Overall Statistics
##
## Accuracy : 0.9103
## 95% CI : (0.8714, 0.9406)
## No Information Rate : 0.8759
## P-Value [Acc > NIR] : 0.04089
##
## Kappa : 0.5022
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: Baratas Class: Caras Class: Medianas
## Sensitivity 0.37500 0.50000 0.9803
## Specificity 0.99248 0.98921 0.4167
## Pos Pred Value 0.81818 0.66667 0.9222
## Neg Pred Value 0.94624 0.97865 0.7500
## Prevalence 0.08276 0.04138 0.8759
## Detection Rate 0.03103 0.02069 0.8586
## Detection Prevalence 0.03793 0.03103 0.9310
## Balanced Accuracy 0.68374 0.74460 0.6985
Al comparar las matrices de confusión para la predicción de la variable “Category”, la Regresión Logística y el KNN exhiben las mayores exactitudes generales, ambas al rededor del 93-94%. Haciendo un analisis más profundo se ve la regresión logística presenta una mayor cooncordancia en sus datos presentados. El modelo de Naive Bayes presenta una excatitud significativamente menor (71.4%). El Árbol de Regresión se sitúa con una exactitud del 91.03%, quedando por debajo de los otros modelos mejores.
En lo que respecta a los errores presentado por cada modelo podemos ver lo siguiente. La Regresión Logística tiende a confundir las casas “Medianas” con “Baratas” y “Caras” en mayor medida. EL modelo de KNN muestra un patrón de error mayor al no predecir correctamente ningún caso de la categoría “Barata” y confundir significativamente las casas “Medianas” con “Caras”. El Naive Bayes presenta errores distribuidos entre las clases, con una notable confusión entre “Medianas” y “Baratas”. El Árbol de Regresión también muestra una tendecia a confundir “Medianas” con “Baratas” y “Caras”.
En los tiempos de ejecución ningún modelo se tardo excesivamente mucho. El único modelo que tuvo una ejecución mas longeva fue el Árbol de regresión pero su tiempo agregado no se separa mucho del de los otros modelos.
Teniendo todo el análisis anterior, tenemos que el modelo de regresión logística es el mejor modelo para predecir la variable “Category”, ofreciendo un mejor equilibrio entre un alto rendimiento predictivo y una concordancia moderada.